home *** CD-ROM | disk | FTP | other *** search
/ Developer Helper 1: Phil & Dave's Excellent CD / Excellent CD HFS.raw / Moof / Goodies / HyperCard Goodies / HyperCard Dev. ToolKit / XCMD.Sources / Peek.p < prev    next >
Text File  |  1987-08-17  |  2KB  |  86 lines

  1. {$R-}
  2.  
  3. (*
  4.     peek -- a sample HyperCard external function (return the contents
  5.     of a memory location).
  6.     ©Apple Computer, Inc. 1987
  7.     All Rights Reserved.
  8.  
  9.  
  10.     To compile and link this file using Macintosh Programmer's Workshop
  11.     (HyperXCmd.p and XCmdGlue.inc must be accessible).
  12.  
  13.     pascal -w Peek.p
  14.     link -o HyperCommands -rt XFCN=0 -sn Main=Peek Peek.p.o
  15.  
  16.     then use ResEdit to copy the resulting XFCN from HyperCommands
  17.     and paste it into the Home stack, or your own stack.
  18.     
  19.     When you build your own XFCNs, if you need to load 
  20.     "{MPW}"Libraries:interface.o, then say -m ENTRYPOINT in the link statement
  21.     to filter out all routines you don't use.
  22. *)
  23.  
  24. {$S Peek }     { Segment name must be the same as the command name. }
  25.  
  26. UNIT DummyUnit;
  27.  
  28. INTERFACE
  29.  
  30. USES MemTypes, HyperXCmd;
  31.   
  32. PROCEDURE EntryPoint(paramPtr: XCmdPtr);
  33.  
  34. IMPLEMENTATION
  35.  
  36. TYPE Str31 = String[31];
  37.      Str19 = String[19];
  38.      WordPtr = ^INTEGER;
  39.      LongPtr = ^LongInt;
  40.  
  41. PROCEDURE Peek(paramPtr: XCmdPtr);                                 FORWARD;
  42.  
  43.   PROCEDURE EntryPoint(paramPtr: XCmdPtr);
  44.   BEGIN
  45.     Peek(paramPtr);
  46.   END;
  47.  
  48.   PROCEDURE Peek(paramPtr: XCmdPtr);
  49.   VAR peekAddr,peekSize,peekVal: LongInt;    
  50.       str: Str255;
  51.  
  52.   {$I XCmdGlue.inc }
  53.  
  54.   BEGIN
  55.     WITH paramPtr^ DO
  56.       BEGIN
  57.         { first param is addr }
  58.         ZeroToPas(params[1]^,str);
  59.         peekAddr := StrToNum(str);
  60.         
  61.         { second param, if given, is size }
  62.         peekSize := 1;
  63.         IF paramCount = 2 THEN
  64.           BEGIN
  65.             ZeroToPas(params[2]^,str);
  66.             peekSize := StrToNum(str);
  67.           END;
  68.         
  69.         CASE peekSize OF
  70.           1: peekVal := BAND($000000FF,Ptr(peekAddr)^);
  71.           2: peekVal := BAND($0000FFFF,WordPtr(BAND($FFFFFFFE,peekAddr))^);
  72.           4: peekVal := LongPtr(BAND($FFFFFFFE,peekAddr))^;
  73.           OTHERWISE peekVal := 0;
  74.         END;
  75.         
  76.         str := NumToStr(peekVal);
  77.         returnValue := PasToZero(str);
  78.       END;
  79.   END;
  80.  
  81.  
  82. END.
  83.  
  84.  
  85.  
  86.